function decoded_common = decode_common_stream(received_signal, channel, ...
    precoding, power_common, power_private, user_idx, num_users)
% decode_common_stream - 解码RSMA系统中的公共流
%
% 输入参数:
%   received_signal - 接收信号
%   channel         - 用户的信道矩阵
%   precoding       - 预编码结构体
%   power_common    - 公共流功率分配系数
%   power_private   - 每个用户私有流功率分配系数
%   user_idx        - 当前用户索引
%   num_users       - 用户总数
%
% 输出参数:
%   decoded_common  - 解码后的公共流

% 获取参数
[num_rx_antennas, signal_length] = size(received_signal);

% 获取公共流的预编码向量
w_c = precoding.common;

% 在RSMA中，接收机首先解码公共流，然后再解码私有流
% 这里使用MMSE(最小均方误差)接收机解码公共流

% 计算公共流的有效信道
h_eff_c = channel * w_c;

% 计算干扰加噪声协方差矩阵
% 干扰来源：其他用户的私有流
R_in = zeros(num_rx_antennas);

% 添加所有私有流的干扰
for u = 1:num_users
    w_k = precoding.private{u};
    R_in = R_in + power_private * (channel * w_k * w_k' * channel');
end

% 添加噪声贡献(假设单位功率)
R_in = R_in + eye(num_rx_antennas);

% 设计MMSE接收机
g_c = (h_eff_c' * inv(R_in))' / (h_eff_c' * inv(R_in) * h_eff_c);

% 应用接收机解码公共流
decoded_common_raw = g_c' * received_signal;

% 符号归一化（如果需要）
decoded_common = decoded_common_raw / sqrt(power_common);

% 在实际系统中，这里会进行信道解码等进一步处理
% 为简化起见，我们直接输出经过解码的符号流

end 